
<link rel="stylesheet" href="php-txt-db-api.css" type="text/css">

<title>Escape Zeichen</title>
<body>
<div align="center"> 
  <h1 align="left"> Escape Zeichen</h1>
  <p align="left">F&uuml;r den SQL-Parser der php-txt-db-api m&uuml;ssen einige 
    Zeichen escaped werden.<br>
    Darunter versteht man das voransetzten des Zeichens \ (Backslash).<br>
    Das ist n&ouml;tig, damit in einem String enthaltene &quot; als solche erkannt 
    werden<br>
    Somit wird zB folgendes SQL Statement m&ouml;glich ist:</p>
  <div align="left">
    <pre align="left">INSERT INTO personen (feld1,feld2) VALUES (&quot;foo&quot;bar&quot;,&quot;bla&quot;);</pre>
  </div>
  <p align="left">Ich m&ouml;chte also in das feld1 den Wert foo&quot;bar einf&uuml;gen. 
    Damit der Parser aber weis das &quot; nicht angibt das nun der Wert fertig 
    ist, sondern, dass das &quot; noch zum Wert geh&ouml;rt muss ich das Escape-Zeichen 
    \ davor stellen:</p>
  <div align="left">
    <pre align="left">INSERT INTO personen (feld1,feld2) VALUES (&quot;foo\&quot;bar&quot;,&quot;bla&quot;);</pre>
    <p>F&uuml;r den SQL-Parser der php-txt-db-api m&uuml;ssen Grunds&auml;tzlich 
      folgende Zeichen (nur bei Werten innerhalb ' ' oder &quot; &quot;) escaped 
      werden: <br>
      ' (Einfaches Anf&uuml;hrungszeichen), &quot; (doppeltes Anf&uuml;hrungszeichen), 
      \ (Backslash)<br>
    </p>
  </div>
  <p align="left">Es gibt 3 unterschiedliche Varianten ein SQL Statement im PHP 
    Code zu schreiben, bei jeder Art sind die Escape Zeichen anders zu benutzen.<br>
    Die erste Variante kommt wohl am h&auml;ufigsten vor, und wenn man Gl&uuml;ck 
    hat braucht man sich gar nie um das escapen oder sogar doppelte escapen zu 
    k&uuml;mmern.</p>
  <h2 align="left">Variante 1: Formular Felder </h2>
  <div align="left">
    <p>Falls man in einem SQL Statement direkt Formular Felder als Werte benutzen 
      m&ouml;chte (also muss man &quot; &quot; verwenden, damit die Variabeln 
      ausgewertet werden), so muss man selbst gar nichts anpassen. Die Inhalte 
      der Formular Felder werden automatisch mit den korrekten Escape-Buchstaben 
      versehen.</p>
    <p>Beispiel:</p>
    <p>$db-&gt;executeQuery(&quot;INSERT INTO personen VALUES('$formFeld1','$formFeld2') 
      &quot;);</p>
  </div>
  <h2 align="left">Variante 2: SQL Statement ist in &quot; &quot;</h2>
  <p align="left">Bei einem String in &quot; &quot; m&uuml;ssen von PHP aus u.A. 
    folgende Zeichen escaped werden:</p>
  <div align="left">
    <table width="426" border="1">
      <tr> 
        <td>Zeichen</td>
        <td>Escaped</td>
      </tr>
      <tr> 
        <td> 
          <div align="left"></div>
          <p align="left"> &quot; (doppelte Anf&uuml;hrungszeichen)</p>
        </td>
        <td>\&quot;</td>
      </tr>
      <tr>
        <td>\ (Backslash)</td>
        <td>\\</td>
      </tr>
    </table>
    <p>Da diese 2 Zeichen aber auch noch f&uuml;r den SQL-Parser zu escapen sind, 
      ist bei diesen beiden ein doppeltes escapen n&ouml;tig (PHP entfernt ja 
      die erste Escape Folge):</p>
  </div>
  <div align="left">
    <table width="732" border="1">
      <tr> 
        <td width="260">Zeichen</td>
        <td width="230">Escaped (f&uuml;r PHP)</td>
        <td width="220">Wert escaped f&uuml;r SQL Parser</td>
      </tr>
      <tr> 
        <td width="260"> 
          <div align="left"></div>
          <p align="left"> &quot; (doppelte Anf&uuml;hrungszeichen)</p>
        </td>
        <td width="230">\&quot;</td>
        <td width="220">\\\&quot;</td>
      </tr>
      <tr> 
        <td width="260">\ (Backslash)</td>
        <td width="230">\\</td>
        <td width="220">\\\\</td>
      </tr>
      <tr>
        <td width="260">' (einfaches Anf&uuml;hrungszeichen)</td>
        <td width="230">' (kein escapen f&uuml;r PHP in &quot; &quot;)</td>
        <td width="220">\'</td>
      </tr>
    </table>
    <p>Beispiel:</p>
    <p>$db-&gt;executeQuery(&quot;INSERT INTO personen VALUES('<i>Doppeltes: <b>\\\&quot;</b> 
      </i>','<i>Einfaches:<b> \'</b> </i>'); &quot;);</p>
  </div>
  <h2 align="left">Variante 3: SQL Statement ist in ' '</h2>
  <p align="left">Bei einem String in ' ' m&uuml;ssen von PHP aus folgende Zeichen 
    escaped werden:</p>
  <div align="left"> 
    <table width="426" border="1">
      <tr> 
        <td>Zeichen</td>
        <td>Escaped</td>
      </tr>
      <tr> 
        <td> 
          <div align="left"></div>
          <p align="left"> ' (doppelte Anf&uuml;hrungszeichen)</p>
        </td>
        <td>\'</td>
      </tr>
      <tr> 
        <td>\ (Backslash)</td>
        <td>\\</td>
      </tr>
    </table>
  </div>
  <p align="left">&nbsp;</p>
  <div align="left">
    <p>Da diese Zeichen aber auch noch f&uuml;r den SQL-Parser zu escapen sind, 
      ist bei diesen beiden ein doppeltes escapen n&ouml;tig (PHP entfernt ja 
      die erste Escape Folge):</p>
  </div>
  <div align="left"> 
    <table width="732" border="1">
      <tr> 
        <td width="260">Zeichen</td>
        <td width="230">Escaped (f&uuml;r PHP)</td>
        <td width="220">Wert escaped f&uuml;r SQL Parser</td>
      </tr>
      <tr> 
        <td width="260"> 
          <div align="left"></div>
          <p align="left"> &quot; (doppelte Anf&uuml;hrungszeichen)</p>
        </td>
        <td width="230">&quot; (kein escapen f&uuml;r PHP in ' ')</td>
        <td width="220">\&quot;</td>
      </tr>
      <tr> 
        <td width="260">\ (Backslash)</td>
        <td width="230">\\</td>
        <td width="220">\\\\</td>
      </tr>
      <tr> 
        <td width="260">' (einfaches Anf&uuml;hrungszeichen)</td>
        <td width="230">\'</td>
        <td width="220">\\\'</td>
      </tr>
    </table>
  </div>
  <p align="left">&nbsp;</p>
  <p align="left">$db-&gt;executeQuery('INSERT INTO personen VALUES(&quot;<i>Doppeltes: 
    <b>\&quot;</b> </i>&quot;,&quot; <i>Einfaches: <b>\\\'</b></i> &quot;); ');</p>
  <p align="left">&nbsp;</p>
  </div>
